package cn.jja8.networkTransmission.tool;

/***
 * 一个简单的数据分割和组合协议
 */
public class ByteSegmentation {
    /**
     * 将两个byte数据合成一个
     * @param b1
     * @param b2
     * @return
     */
    static public byte[] 合成(byte[] b1,byte[] b2){
        if (5L+b1.length+b2.length>Integer.MAX_VALUE){
            throw new RuntimeException("两份数据的长度太长，超过了int的上限");
        }
        byte[] b数据 = new byte[5+b1.length+b2.length];
        byte[] 长度数组 = ByteTool.IntToByte(b1.length);
        System.arraycopy(长度数组,0,b数据,0,5);
        System.arraycopy(b1, 0, b数据, 5, b1.length);
        System.arraycopy(b2, 0, b数据,b1.length+5, b2.length);
        return  b数据;
    }
    /**
     * 一个用于返回拆分好的数据的包装类
     * */
    public static class Byte2{
        public byte[] b1;
        public byte[] b2;
        public Byte2(byte[] b1, byte[] b2) {
            this.b1 = b1;
            this.b2 = b2;
        }
    }
    /**
     * 将一个byte拆分成两个
     */
    static public Byte2 拆分(byte[] b){
        if (b.length<5){
            return new Byte2(new byte[0],new byte[0]);
        }
        /*
         *  上方代码测试
         * */
        byte[] 长度数组 = new byte[5];
        System.arraycopy(b,0,长度数组,0,5);
        int len = ByteTool.ByteToInt(长度数组);
        Byte2 byte2 = new Byte2(new byte[len],new byte[b.length-5-len]);
        System.arraycopy(b,5,byte2.b1,0,byte2.b1.length);
        System.arraycopy(b,5+byte2.b1.length,byte2.b2,0,byte2.b2.length);
        return byte2;
    }

}
